package coop.bancocredicoop.proyectos.gd.rbac;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class CollectionPermisoRBAC {

	static private Collection<PermisoRBAC> colPermisoRBAC = Collections.
			unmodifiableCollection(Arrays.asList(
			new PermisoRBAC("GD2_CARGA", "GdocGrupoDocII", "INGR", "GROUP_GD_CARGA"),
			new PermisoRBAC("GD2_MODIFICACION", "GdocGrupoDocII", "MODI", "GROUP_GD_CARGA"),
			new PermisoRBAC("GD2_CONSULTA", "GdocGrupoDocII", "CONS", "GROUP_GD_CONSULTA"),
			new PermisoRBAC("GD2_ELIMINACION", "GdocGrupoDocII", "ELI", "GROUP_GD_CARGA"),
			new PermisoRBAC("GD2_PARAMETRIZACION", "GdocGrupoDocIIAdm", "ACT", "")));

	public static Collection<PermisoRBAC> getCollection() {
		return colPermisoRBAC;
	}
	
	public static Set<String> getRolesAlfrescoHabilitados(RBAC rbac) throws Exception {
    	Set<String> setGrupoAlfresco = new HashSet<String>();
    	
		for (PermisoRBAC permisoRBAC : CollectionPermisoRBAC.getCollection()) {
			if (permisoRBAC.tieneGrupoAlfresco() && 
			    rbac.tienePermiso(permisoRBAC.getNombre())) {
				setGrupoAlfresco.add(permisoRBAC.getGrupoAlfresco());
			}
		}

		return setGrupoAlfresco;
	}

	public static Set<String> getRolesAlfrescoDeshabilitados(RBAC rbac) throws Exception {
		Set<String> setGrupoAlfresco = new HashSet<String>();

		for (PermisoRBAC permisoRBAC : CollectionPermisoRBAC.getCollection()) {
			if (permisoRBAC.tieneGrupoAlfresco()) {
				setGrupoAlfresco.add(permisoRBAC.getGrupoAlfresco());
			}
		}

		for (String rolAlfresco : getRolesAlfrescoHabilitados(rbac)) {
			setGrupoAlfresco.remove(rolAlfresco);
		}

		return setGrupoAlfresco;
	}

}
